查看原文
其他

安卓的“左倾”革命:内存安全语言

安全牛 2022-07-02

点击蓝字关注我们





谷歌的Android 11将安全性(BYOD相关)和隐私增强功能作为主要卖点,但谷歌明白,要想从根本上扭转Android安全态势,就必须在生态上游和开发周期的“左侧”下猛药。


近日,谷歌的Android安全新策略引起了网络安全和移动互联行业的广泛关注。谷歌鼓励开发人员转向使用内存安全的编程语言,例如Java、Kotlin和Rust,并宣称C和C++的安全性亟待提高。


影响Android操作系统的严重和高危漏洞


头号威胁:内存安全


根据谷歌最新公布的安卓安全报告统计(上图),Android操作系统的严重和高危安全漏洞中,有59%是内存问题,例如内存损坏和溢出。内存安全是迄今为止最主要的Android安全问题(59%),其次是权限绕过漏洞,占Google安全工程师在2019年修复的漏洞的21%。


不仅仅是Android系统,内存安全通常也是Java、Windows 10和Chrome等主要平台的头号安全漏洞类别。谷歌工程师去年曾表示,Chrome安全漏洞中有70%是内存安全问题。之前,曾有微软工程师透露说,其产品修复的所有错误中有70%是内存安全性问题,即允许访问超出操作系统分配的内存和地址的软件漏洞。


谷歌认为,使用更加安全的开发语言是保护Android免受恶意软件和漏洞利用的根本措施。“C和C++不能像Java、Kotlin和Rust这样的语言提供内存安全。鉴于Android安全报告中的大多数安全漏洞都是内存安全问题(上图),因此谷歌采用了两种安全策略:提高C/C++的安全性,同时也鼓励使用内存安全语言。”Google在Android安全与隐私小组的博客中指出。


出于相同的安全原因,亚马逊(AWS)和Microsoft也在推动采用Rust。Mozilla创建了Rust用于Firefox的Gecko引擎中处理与C++内存相关的安全性问题。Rust的1.0版于2015年推出,但采用率仍然较低。Microsoft希望将其用于系统编程而不是应用程序开发。AWS使用Rust构建了基于Linux的容器操作系统Bottlerocket。


数据驱动的安全强化


谷歌指出,由于安卓生态系统的多样化、安全性策略和方法以及缓解措施的的优先级决策遵循“数据驱动”。


这种以数据为依据的方法已产生了可衡量的实际结果。根据数据统计,过去一年Google修复的绝大多数Android漏洞都来自媒体、蓝牙和NFC组件。媒体库也是Google在2015年披露的Android远程利用高危漏洞Stagefright所影响的关键组件。


如今,谷歌为加强Android媒体服务器框架所做的努力已经有所回报,2020一整年都没有收到Android媒体框架远程利用漏洞报告。


除了迁移到内存安全语言之外,谷歌强调的其他Android安全缓解和强化措施还包括:


  • 沙箱

  • 高权限大型组件(例如媒体库)的分解

  • 提高C/C++的安全性

  • 漏洞利用缓解

  • 地址空间布局随机化(ASLR)

  • 控制流完整性(CFI)

  • Stack Canaries

  • 内存标记


谷歌指出,LLVM项目的控制流完整性(CFI)已于2018年在Android Pie中的媒体框架、蓝牙和NFC中启用。


谷歌和微软两家公司都试图为C和C++提供更安全的系统编程功能。微软通过Windows安全功能Control Flow Guard改进了CFI。去年,微软在Clang和LLVM C++编译器以及Rust中启用了CFG支持。  


谷歌还需要权衡每次缓解的性能成本,以及在不负面影响设备稳定性或用户体验的情况下部署和支持缓解所需的工作量。缓解措施/组件的系统开销可能会缩短电池续航时间并降低设备的响应速度,从而对用户体验产生负面影响。对于廉价Android手机这样的入门级设备尤其如此,但入门级设备也应从安全加固中受益。


最后,谷歌指出,启用缓解措施时,除了安全利益和性能成本(例如短期部署和长期支持的成本)外,还有更多要考虑的因素,例如部署的稳定性和长期支持问题。


参考资料


https://security.googleblog.com/2021/01/data-driven-security-hardening-in.html


相关阅读

微软正在为Windows 10开发Android子系统

全军覆没:Android主流应用普遍存在加密漏洞

针对Linux的勒索软件木马现身,属于RansomEXX变种


合作电话:18311333376
合作微信:aqniu001
投稿邮箱:editor@aqniu.com





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存